Go语言基础语法

Go语言基础语法

  • Hello World
  • 变量&常量定义
  • if 判断语句
  • for 循环语句(只有for)
  • switch 选择语句
  • 数组(较少使用)
  • 切片(较多使用)
  • map(实际最常用)
  • range
  • 函数
  • 指针
  • 结构体
  • 结构体方法
  • 错误处理
  • 字符串操作
  • 字符串格式化
  • JSON操作
  • 时间处理
  • 数字解析
  • 进程信息

Hello World

package mainimport ("fmt"
)func main() {fmt.Println("Hello World")
}

变量&常量定义

仅定义不使用会报错 a declared but not used
golang仅定义变量而未赋值的话,则初始值为假,(int为0,bool为false,string为‘')

package mainimport ("fmt""math"
)func main() {//定义变量//仅定义不使用会报错  a declared but not usedvar a = "initial"var b, c int = 1, 2var d = true//golang仅定义变量而未赋值的话,则初始值为假,(int为0,bool为false,string为‘')var e float64f := float32(e)g := a + "foo"fmt.Println(a, b, c, d, e, f) //initial 1 2 true 0 0fmt.Println(g)                //initialfoo//定义常量const s string = "constant"const h = 500000const i = 3e20 / hfmt.Println(s, h, i, math.Sin(h), math.Sin(i))
}

if 判断语句

if后面不需要写括号,编译器会自动去掉
语句内容必须有大括号“{}”

package mainimport "fmt"func main() {//if后面不需要写括号,编译器会自动去掉//语句内容必须有大括号“{}”if 7%2 == 0 {fmt.Println("7 is even")} else {fmt.Println("7 is odd")}if 8%4 == 0 {fmt.Println("8 is divisible by 4")}if num := 9; num < 0 {fmt.Println(num, " is negative")} else if num < 10 {fmt.Println(num, " has 1 digit")} else {fmt.Println(num, " has multiple digits")}
}

for 循环语句(只有for)

Go语言中只有for循环语句

package mainimport "fmt"func main() {i := 1for {fmt.Println("loop")break}for j := 0; j < 10; j++ {fmt.Println(j)}for n := 0; n < 5; n++ {if n%2 == 0 {continue}fmt.Println(n)}for i <= 3 {fmt.Println(i)i = i + 1}
}

switch 选择语句

package mainimport ("fmt""time"
)func main() {a := 2switch a {case 1:fmt.Println("one")case 2:fmt.Println("two")case 3:fmt.Println("three")case 4, 5:fmt.Println("four or five")default:fmt.Println("other")}//可以使用任意类型变量写switcht := time.Now()switch {case t.Hour() < 12:fmt.Println("It's before noon")default:fmt.Println("It's after noon")}
}

数组(较少使用)

固定长度

package mainimport "fmt"func main() {var a [5]inta[4] = 100fmt.Println(a[4], len(a))b := [5]int{1, 2, 3, 4, 5}fmt.Println(b)var twoD [2][3]intfor i := 0; i < 2; i++ {for j := 0; j < 3; j++ {twoD[i][j] = i + j}}fmt.Println("2d: ", twoD)
}

切片(较多使用)

动态长度

package mainimport "fmt"func main() {s := make([]string, 3)s[0] = "a"s[1] = "b"s[2] = "c"fmt.Println("get:", s[2])   //get: cfmt.Println("len:", len(s)) //len: 3s = append(s, "d")s = append(s, "e", "f")fmt.Println(s) //[a b c d e f]c := make([]string, len(s))copy(c, s)fmt.Println(c) //[a b c d e f]fmt.Println(s[2:5]) //[c d e]fmt.Println(s[:5])  //[a b c d e]fmt.Println(s[2:])  //[c d e f]good := []string{"g", "o", "o", "d"}fmt.Println(good) //[g o o d]
}

map(实际最常用)

完全无序,随机输出

package mainimport "fmt"func main() {m := make(map[string]int)m["one"] = 1m["two"] = 2fmt.Println(m)           //map[one:1 two:2]fmt.Println(len(m))      // 2fmt.Println(m["one"])    // 1fmt.Println(m["unknow"]) // 0r, ok := m["unknow"] //0 flasefmt.Println(r, ok)delete(m, "one") //删除m2 := map[string]int{"one": 1, "two": 2}var m3 = map[string]int{"one": 1, "two": 2}fmt.Println(m2, m3) //map[one:1 two:2] map[one:1 two:2]
}

range

package mainimport "fmt"func main() {nums := []int{2, 3, 4}sum := 0for i, num := range nums {sum += numif num == 2 {fmt.Println("index:", i, "num:", num) // index: 0 num: 2}}fmt.Println(sum) // 9m := map[string]string{"a": "A", "b": "B"}for k, v := range m {fmt.Println(k, v) // b 8; a A}for k := range m {fmt.Println("key", k) // key a; key b}
}

函数

package mainimport "fmt"func add(a int, b int) int {return a + b
}func add2(a, b int) int {return a + b
}func exists(m map[string]string, k string) (v string, ok bool) {v, ok = m[k]return v, ok
}func main() {res := add(1, 2)fmt.Println(res) // 3v, ok := exists(map[string]string{"a": "A"}, "a")fmt.Println(v, ok) // A True
}

指针

package mainimport "fmt"func add2(n int) {n += 2
}func add2ptr(n *int) {*n += 2
}func main() {n := 5add2(n)fmt.Println(n) // 5add2ptr(&n)fmt.Println(n) // 7
}

结构体

package mainimport "fmt"type user struct {name     stringpassword string
}func main() {a := user{name: "wang", password: "1024"}b := user{"wang", "1024"}c := user{name: "wang"}c.password = "1024"var d userd.name = "wang"d.password = "1024"fmt.Println(a, b, c, d)                 // {wang 1024} {wang 1024} {wang 1024} {wang 1024}fmt.Println(checkPassword(a, "haha"))   // falsefmt.Println(checkPassword2(&a, "haha")) // false
}func checkPassword(u user, password string) bool {return u.password == password
}func checkPassword2(u *user, password string) bool {return u.password == password
}

结构体方法

package mainimport "fmt"type user struct {name     stringpassword string
}func (u user) checkPassword(password string) bool {return u.password == password
}func (u *user) resetPassword(password string) {u.password = password
}func main() {a := user{name: "wang", password: "1024"}a.resetPassword("2048")fmt.Println(a.checkPassword("2048")) // true
}

错误处理

package mainimport ("errors""fmt"
)type user struct {name     stringpassword string
}func findUser(users []user, name string) (v *user, err error) {for _, u := range users {if u.name == name {return &u, nil}}return nil, errors.New("not found")
}func main() {u, err := findUser([]user{{"wang", "1024"}}, "wang")if err != nil {fmt.Println(err)return}fmt.Println(u.name) // wangif u, err := findUser([]user{{"wang", "1024"}}, "li"); err != nil {fmt.Println(err) // not foundreturn} else {fmt.Println(u.name)}
}

字符串操作

package mainimport ("fmt""strings"
)func main() {a := "hello"fmt.Println(strings.Contains(a, "ll"))                // truefmt.Println(strings.Count(a, "l"))                    // 2fmt.Println(strings.HasPrefix(a, "he"))               // truefmt.Println(strings.HasSuffix(a, "llo"))              // truefmt.Println(strings.Index(a, "ll"))                   // 2fmt.Println(strings.Join([]string{"he", "llo"}, "-")) // he-llofmt.Println(strings.Repeat(a, 2))                     // hellohellofmt.Println(strings.Replace(a, "e", "E", -1))         // hEllofmt.Println(strings.Split("a-b-c", "-"))              // [a b c]fmt.Println(strings.ToLower(a))                       // hellofmt.Println(strings.ToUpper(a))                       // HELLOfmt.Println(len(a))                                   // 5b := "你好"fmt.Println(len(b)) // 6
}

字符串格式化

package mainimport "fmt"type point struct {x, y int
}func main() {s := "hello"n := 123p := point{1, 2}fmt.Println(s, n) // hello 123fmt.Println(p)    // {1 2}fmt.Printf("s=%v\n", s)  // s=hellofmt.Printf("n=%v\n", n)  // n=123fmt.Printf("p=%v\n", p)  // p={1 2}fmt.Printf("p=%+v\n", p) // p={x:1 y:2}fmt.Printf("p=%#v\n", p) // p=main.point{x:1, y:2}f := 3.141592653fmt.Println(f)          // 3.141592653fmt.Printf("%.2f\n", f) // 3.14
}

JSON操作

只要结构体的每个成员第一个字母都是大写,这个结构体就可以使用json.Marshal方法序列化,输出时想要小写的成员名就加上 'json:"age"'
打印时需要做string转换

package mainimport ("encoding/json""fmt"
)type userInfo struct {Name  stringAge   int `json:"age"`Hobby []string
}func main() {a := userInfo{Name: "wang", Age: 18, Hobby: []string{"Golang", "TypeScript"}}buf, err := json.Marshal(a)if err != nil {panic(err)}fmt.Println(buf)         // [123 34 78 97...]fmt.Println(string(buf)) // {"Name":"wang","age":18,"Hobby":["Golang","TypeScript"]}buf, err = json.MarshalIndent(a, "", "\t")if err != nil {panic(err)}fmt.Println(string(buf))var b userInfoerr = json.Unmarshal(buf, &b)if err != nil {panic(err)}fmt.Printf("%#v\n", b) // main.userInfo{Name:"wang", Age:18, Hobby:[]string{"Golang", "TypeScript"}}
}

时间处理

不同于Java YYYY-MM-dd的方法,go语言用特定时间指示格式

package mainimport ("fmt""time"
)func main() {now := time.Now()fmt.Println(now) // 2022-03-27 18:04:59.433297 +0800 CST m=+0.000087933t := time.Date(2022, 3, 27, 1, 25, 36, 0, time.UTC)t2 := time.Date(2022, 3, 27, 2, 30, 36, 0, time.UTC)fmt.Println(t)                                                  // 2022-03-27 01:25:36 +0000 UTCfmt.Println(t.Year(), t.Month(), t.Day(), t.Hour(), t.Minute()) // 2022 March 27 1 25fmt.Println(t.Format("2006-01-02 15:04:05"))                    // 2022-03-27 01:25:36diff := t2.Sub(t)fmt.Println(diff)                           // 1h5m0sfmt.Println(diff.Minutes(), diff.Seconds()) // 65 3900t3, err := time.Parse("2006-01-02 15:04:05", "2022-03-27 01:25:36")if err != nil {panic(err)}fmt.Println(t3 == t)    // truefmt.Println(now.Unix()) // 1648738080
}

数字解析

strconv.ParseInt()中的参数,10表示10进制,写0的情况下自动推测,64表示精度

package mainimport ("fmt""strconv"
)func main() {f, _ := strconv.ParseFloat("1.234", 64)fmt.Println(f) // 1.234n, _ := strconv.ParseInt("111", 10, 64)fmt.Println(n) // 111n, _ = strconv.ParseInt("0x1000", 0, 64)fmt.Println(n) // 4096n2, _ := strconv.Atoi("123")fmt.Println(n2) // 123n2, err := strconv.Atoi("AAA")fmt.Println(n2, err) // 0 strconv.Atoi: parsing "AAA": invalid syntax
}

进程信息

package mainimport ("fmt""os""os/exec"
)func main() {// go run example/20-env/main.go a b c dfmt.Println(os.Args)           // [/var/folders/8p/n34xxfnx38dg8bv_x8l62t_m0000gn/T/go-build3406981276/b001/exe/main a b c d]fmt.Println(os.Getenv("PATH")) // /usr/local/go/bin...fmt.Println(os.Setenv("AA", "BB"))buf, err := exec.Command("grep", "127.0.0.1", "/etc/hosts").CombinedOutput()if err != nil {panic(err)}fmt.Println(string(buf)) // 127.0.0.1       localhost
}

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

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

相关文章

23 自定义控件

案例&#xff1a;组合Spin Box和Horizontal Slider实现联动 新建Qt设计师界面&#xff1a; 选择Widget&#xff1a; 选择类名&#xff08;生成.h、.cpp、.ui文件&#xff09; 在smallWidget.ui中使用Spin Box和Horizontal Slider控件 可以自定义数字区间&#xff1a; 在主窗口w…

Docker 单机/集群 部署 Nacos2.2.0

单机部署 1- 拉取镜像 docker pull nacos/nacos-server:v2.2.02- 准备挂载的配置文件目录和日志目录 日志目录(空目录)&#xff1a;./nacos/logs配置文件&#xff1a;./nacos/conf/application.properties 从官网下载 nacos 压缩包&#xff1a;Release 2.2.0 (Dec 14, 2022…

sql进阶:求满足某列数值相加无限接近90%的行(90分位)

sql 一、案例分析二、思路三、代码实现一、案例分析 表中有某个id列和数值列,求数值列占比为90%的id,如有个用户表,存储id和消费金额order_cnt,求一条sql查出消费占比无限接近90%的所有客户,如表中总消费为10000,占比最高的是4000、3000、2800,对应A、B、C用户,查出A、B、C用户…

18.背景轮播

背景轮播 html部分 <div class"container"><div class"slide active" style"background-image: url(./static/20180529205331_yhGyf.jpeg);"></div><div class"slide " style"background-image: url(./s…

【数据挖掘】使用 LSTM 进行时间和序列预测

一、说明 每天&#xff0c;人类在执行诸如过马路之类的任务时都会做出被动预测&#xff0c;他们估计汽车的速度和与汽车的距离&#xff0c;或者通过猜测球的速度并相应地定位手来接球。这些技能是通过经验和实践获得的。然而&#xff0c;由于涉及众多变量&#xff0c;预测天气或…

P3382 【模板】三分法

三分其实是每次取L,R的终点mid&#xff0c;把mid左边一点点的函数值和右边一点点的函数值比较&#xff0c;舍弃一边的区间&#xff0c;这样不断缩小区间直到满足精度要求(一般eps取0.1*精度)&#xff0c;但我们都喜欢取三等分点&#xff0c;其实只要是左边一点点和右边一点点就…

linux 升级node

linux环境在执行npm ci是报错&#xff0c;提示node版本太低&#xff0c;故需升级&#xff0c;升级过程如下&#xff1a; 1. npm cache clean -f 2. npm install -g n 3. n stable # 下载最新的稳定的版本 上面第3行结果如下&#xff1a; installing : node-v20.5.0 mkdi…

SpringCloudAlibaba微服务实战系列(二)Nacos配置中心

SpringCloudAlibaba Nacos配置中心 在java代码中或者在配置文件中写配置&#xff0c;是最不雅的&#xff0c;意味着每次修改配置都需要重新打包或者替换class文件。若放在远程的配置文件中&#xff0c;每次修改了配置后只需要重启一次服务即可。话不多说&#xff0c;直接干货拉…

NoSQL之 Redis配置与优化

文章目录 一.关系数据库与非关系型数据库1.关系型数据库2.非关系型数据库3.关系型数据库和非关系型数据库区别4.非关系型数据库产生背景 二.Redis简介1.了解Redis2.Redis 具有以下几个优点3.Redis为何这么快 三.Redis 安装及应用1.Redis 安装部署2.Redis 命令工具2.1 redis-cli…

数字化新移民的转型之路探析

数字化转型&#xff0c;本质还是转型 很多企业谈到数字化转型时往往会对技术产生敬畏心理&#xff0c;与之伴随的后续动作往往是过度关注科技。但不重视与任用员工&#xff0c;再好的AI、算法、大数据等也发挥不了威力。 人和组织方面的问题&#xff0c;是导致很多企业的数字…

会点C++还需要再学Python吗?

提到的C、数据结构与算法、操作系统、计算机网络和数据库技术等确实是计算机科学中非常重要的基础知识领域&#xff0c;对于软件开发和计算机工程师来说&#xff0c;它们是必备的核心知识。掌握这些知识对于开发高性能、可靠和安全的应用程序非常重要。Python作为一种脚本语言&…

运动蓝牙耳机什么牌子的好用、最好用的运动蓝牙耳机推荐

音乐是运动的灵魂&#xff0c;而一款优秀的运动耳机则是让音乐与我们的身体完美融合的关键。今天&#xff0c;我推荐五款备受运动爱好者喜爱的耳机&#xff0c;它们以卓越的音质、舒适的佩戴和出色的稳定性能脱颖而出&#xff0c;助你在运动中创造最佳状态。 1、NANK南卡Runne…

Langchain 的 SimpleSequentialChain 和 SequentialChain

Langchain 的 SimpleSequentialChain 和 SequentialChain 1. SimpleSequentialChain2. SequentialChain3. Memory in Sequential Chains 1. SimpleSequentialChain 调用语言模型后的下一步是对语言模型进行一系列调用。当您想要获取一个调用的输出并将其用作另一个调用的输入时…

安全第一天

1. 编码 1.1 ASCLL编码 ASCII 是基于拉丁字母的一套电脑编码系统&#xff0c;主要用于显示现代英语和其他西欧语言。它是最通用的信息交换标准&#xff0c;并等同于国际标准ISO/IEC 646。 1.2 URL编码 URL&#xff1a;&#xff08;统一资源定位器、定位地址&#xff0c;俗称网页…

k8s常见的资源对象使用

目录 一、kubernetes内置资源对象 1.1、kubernetes内置资源对象介绍 1.2、kubernetes资源对象操作命令 二、job与cronjob计划任务 2.1、job计划任务 2.2、cronjob计划任务 三、RC/RS副本控制器 3.1、RC副本控制器 3.2、RS副本控制器 3.3、RS更新pod 四、Deployment副…

分布式协议Raft和Paxos详解

一、Raft是一种相对简化的分布式一致性算法&#xff0c;它由Diego Ongaro和John Ousterhout于2013年提出。与Paxos相比&#xff0c;Raft的设计目标是使一致性问题更易于理解、实现和部署。 Raft协议核心思想是将一致性问题分解为几个关键组件&#xff0c;包括领导者选举、日志…

概率论的学习和整理21:用EXCEL来做假设检验(未完成草稿)

目录 1 EXCEL可以用来做假设检验 1.1 如何打开 数据分析 和 规划求解 1.2 EXCEL里关于正态分布的准备知识 2 基本的假设检验 2.1 最基本的假设检验&#xff0c;单边的Z检验 2.1 双样本F检验 2.1.1 例题 2.1.2 进行F检验之前需要满足一些假设条件 2.1.3 计算步骤 2.1…

MySQL 数据抽稀 每分钟取一条

假如原始数据为每5秒一个数据&#xff0c;现在想展示为每4分钟一条数据&#xff0c;先按照分钟数把除以4余数为0的行选出来&#xff0c;在按照 年月日 时分&#xff0c;做组内排序&#xff08;窗函数ROW_NUMBER&#xff09;&#xff0c;最后再拿出序号为1的行。 WITH data_01 …

spring学习笔记十

Spring使用注解Annotation定义Bean 1、UserDao接口和实现类 public interface UserDao {void save(); }Component("userDao") public class UserDaoImpl implements UserDao {public void save() {System.out.println("user dao save...");} }2、SpringC…

网工实操基础学习23.07.05

1.交换机&#xff0c;路由器 交换机的作用是链接同一个网络下的所有设备&#xff0c;如果有无线设备加入&#xff0c;需要添加AP&#xff08;无线接入点&#xff09;设备在交换机层次上 路由器的作用是将不同网络下的设备链接 2.IP地址 划分网段&#xff1a;网络位、网段、…