go基础(flag、json)

go基础

  • 基础
    • main函数
    • 数据类型
    • 类型转换
    • switch
    • 函数
    • 计算效率
    • go中实现工厂模式
    • switch
  • flag 解析命令行参数
  • json
    • 结构体序列化
    • map序列化
    • struct 反序列化

基础

main函数

在这里插入图片描述

package main
import "log"
func main() {log.Println("hello world")
}

cd 到 main 文件夹下 go build 将会得到 exe的可执行文件;
go install 将会在GOPATH/bin 目录下得到exe可执行文件;
测试环境下,使用go run运行.

编译重命名:go build -o hello.sh main.go

数据类型

我不喜欢把按照基本数据类型和复杂数据类型来划分,我更喜欢把go划分为值类型和引用数据类型

  • 值类型
    整型(int,int8,int16,int32,int64,uint,uint8,uint16,uint32,uint64,byte)
    浮点型(float32,float64)
    字符型byte
    布尔型bool
    字符串string
    数组
    结构体
  • 引用类型
    指针
    数组
    切片
    函数
    map

类型转换

必须强制转换

import ("fmt""strconv"
)func main() {// 基本数据类型转换i := 10f := float64(i)fmt.Println(f)// 基本类型转string 方式1strBool := fmt.Sprintf("%v", true)fmt.Println(strBool)// 基本类型转string 方式2formatInt := strconv.FormatInt(10, 10) // 转换的值,进制fmt.Println(formatInt)formatFloat := strconv.FormatFloat(10.0, 'f', 10, 64) // 转换的值,常规格式,小数点后几位,精度fmt.Println(formatFloat)// string转基本数据类型parseInt, _ := strconv.ParseInt("2555", 10, 64) // 转换的值,进制,精度fmt.Println(parseInt)parseFloat, _ := strconv.ParseFloat("3.23", 64)fmt.Println(parseFloat)
}

switch

不需要break默认就有,存在常规写法
穿透使用 fallthrough

函数

闭包

package main
import "fmt"
func main() {i := 10f := add(i)fmt.Println(f(2, 3))fmt.Println(f(2, 3))
}
func add(value int) func(a int, b int) int {return func(a int, b int) int {value += (a + b)return value}
}

func makeSuffix(suffix string) func(fileName string) string {return func(fileName string) string {fileSuffix := strings.Split(fileName, ".")[1]if fileSuffix == suffix {return fileName} else {return fmt.Sprintf("%s.%s", strings.Split(fileName, ".")[0], suffix)}}
}

其实 此时不用闭包也能完成,不过传入一次,可以反复使用

计算效率

func main() {now := time.Now()str := ""for i := 0; i < 10000000; i++ {str += strconv.Itoa(i)}since := time.Since(now)fmt.Println("time: ", since.Seconds())
}

go中实现工厂模式

type student struct {name stringage int
}func NewStudent(name string, age int) *student {return &student{name, age,}
}

switch

func TypeJudge(items ...interface{}) {for index, x := range items {switch x.(type) {case bool:fmt.Println("第%v个参数是bool 类型 ,值是%v\n", index, x)case float32:fmt.Println("第%v个参数是float32 类型 ,值是%v\n", index, x)default:fmt.Println("不确定")}}
}

flag 解析命令行参数

链接: flag解析命令行参数

json

结构体序列化

package mainimport ("encoding/json""fmt"
)type Monster struct {Name     stringAge      intBirthday stringSal      float64Skill    string
}func main() {// 这里的tag 必然是反射,用到的地方还有很多,比如说参数校验、orm字段映射// 这里类似java的注解,java里面也是使用反射实现type Monster struct {Name     string  `json:"name"`Age      int     `json:"age"`Birthday string  `json:"birthday"`Sal      float64 `json:"sal"`Skill    string  `json:"skill"`}marshal, err := json.Marshal(monster)if err != nil {fmt.Println(err)return}fmt.Println(string(marshal))
}

map序列化

m := map[string]interface{}{"name": "张三","age":  13,}marshal, err := json.Marshal(m)if err != nil {fmt.Println(err)return}fmt.Println(string(marshal))

struct 反序列化

type Monster struct {Name     string  `json:"username"`Age      int     `json:"age"`Birthday string  `json:"birthday"`Sal      float64 `json:"sal"`Skill    string  `json:"skill"`
}func main() {jsonData := []byte(`{"USERname":"Monster","age":100,"Birthday":"2000-01-01","Sal":9999.99,"Skill":"Coding"}`)var monster Monstererr := json.Unmarshal(jsonData, &monster)if err != nil {fmt.Println("Error:", err)return}fmt.Println("Deserialized Monster:")fmt.Println("Name:", monster.Name)fmt.Println("Age:", monster.Age)fmt.Println("Birthday:", monster.Birthday)fmt.Println("Sal:", monster.Sal)fmt.Println("Skill:", monster.Skill)
}

这个反序列化 竟然 大小写不敏感

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/652231.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决双击PDF文件出现打印的问题【Adobe DC】

问题描述 电脑安装Adobe Acrobat DC之后&#xff0c;双击PDF文件就会出现打印&#xff0c;而无法直接打开。 右键PDF文件就会发现&#xff0c;第一栏出现的不是用Adobe打开&#xff0c;而是打印。 重装软件多次仍然无法解决。 原因 右键菜单被改写了。双击其实是执行右键菜…

OpenHarmony硬件合成方案解析

本文档主要讲解在OpenHarmony中&#xff0c;硬件合成适配的方法及原理说明。 环境说明&#xff1a; OHOS版本&#xff1a;3.1-Release及以上 一、背景介绍 1.1 什么是合成 要理解什么是合成&#xff0c;合成做了什么&#xff1f;我们先通过分解设置界面来回答这个问题: 在…

MF(推荐系统的矩阵分解技术)论文笔记

论文概述 推荐系统的矩阵分解技术可以为用户提供更为准确的个性化推荐&#xff0c;对比传统的近邻技术&#xff0c;矩阵分解技术可以纳入更多信息&#xff0c;如隐式反馈、时间效应和置信度 近邻技术&#xff1a;基于用户或物品之间的相似性进行推荐&#xff0c;当用户之间已…

SpringBoot---------整合Redis

目录 第一步&#xff1a;引入依赖 第二步&#xff1a;配置Redis信息 第三步&#xff1a;选择Spring Data Redis进行操作Redis数据库 ①操作String类型数据&#xff08;用的少&#xff09; ②操作Object类型数据&#xff08;重要&#xff01;&#xff01;&#xff01;&#x…

CLIP论文笔记:Learning Transferable Visual Models From Natural Language Supervision

导语 会议&#xff1a;ICML 2021链接&#xff1a;https://proceedings.mlr.press/v139/radford21a/radford21a.pdf 当前的计算机视觉系统通常只能识别预先设定的对象类别&#xff0c;这限制了它们的广泛应用。为了突破这一局限&#xff0c;本文探索了一种新的学习方法&#x…

论文解读:(CAVPT)Dual Modality Prompt Tuning for Vision-Language Pre-Trained Model

v1文章名字&#xff1a;Dual Modality Prompt Tuning for Vision-Language Pre-Trained Model v2文章名字&#xff1a;Class-Aware Visual Prompt Tuning for Vision-Language Pre-Trained Model 文章汇总 对该文的改进&#xff1a;论文解读&#xff1a;(VPT)Visual Prompt …

【03-掌握Scikit-learn:深入机器学习的实用技术】

文章目录 前言数据预处理缺失值处理数据缩放 特征选择模型训练参数调整模型评估总结 前言 经过了对Python和Scikit-learn的基础安装及简单应用&#xff0c;我们现在将更深入地探究Scikit-learn的实用技术&#xff0c;以进一步提升我们的数据科学技能。在本文中&#xff0c;我们…

The Log-Structured Merge-Tree (LSM-Tree) 论文阅读笔记

原论文&#xff1a;The Log-Structured Merge-Tree (LSM-Tree) LSM-Tree的简介和关键技术要点 LSM-Tree&#xff08;Log-Structured Merge-Tree&#xff09;是一种为高吞吐量读写操作优化的数据结构&#xff0c;特别适用于写入密集型的应用场景。它由Patrick O’Neil等人开发…

Linux快速部署大语言模型LLaMa3,Web可视化j交互(Ollama+Open Web UI)

本文在个人博客同步发布&#xff0c;前往阅读 1 介绍 本文将介绍使用开源工具Ollama(60.6k⭐)部署LLaMa大模型&#xff0c;以及使用Open WebUI搭建前端Web交互界面的方法。 我们先来过一遍几个相关的概念&#xff0c;对这块比较熟悉的朋友可跳过。 1.1 大规模语言模型 大规…

YOLOv8 的安装、使用与训练

YOLOV8 YOLOv8简介 YOLOv8是YOLO系列的最新版本&#xff0c;它融合了先进的深度学习技术和目标检测领域的最新研究成果 与其前身相比&#xff0c;YOLOv8在速度和精度方面都有了显著的提升&#xff0c;使其成为一个理想的实时目标检测解决方案。该模型结合了卷积神经网络&…

身份证二要素核验介绍及使用方法

一、身份证二要素核验简介及重要性 身份证二要素核验是一种重要的身份验证技术&#xff0c;它在现代社会中发挥着至关重要的作用&#xff0c;特别是在涉及个人信息安全和隐私保护的领域。通过身份证二要素核验&#xff0c;我们可以有效地确认个人身份的真实性&#xff0c;从而…

基于spring boot的实习管理系统

基于spring boot的实习管理系统设计与实现 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&…