剑指offer-二叉树中和为某一值的路径 channel底层实现、如何实现并发安全 goroutine和线程的区别,为什么说goroutine轻量 defer关键字后的函数在什么时候调用 主函数return前还是return后 场景题:使用top命令观察一个主动malloc申请了1g内存的进程 tcp ip 三握四挥的过程 两次发包后是否可以发数据 半连接队列
go 相关官方地址被墙真的很让人暴躁: go 版本:go version go1.13.6 windows/amd64 安装 gin 框架时使用了:go get github.com/kardianos/govendor 然后: go get github.com/kardianos/govendor: module github.com/kardianos/govendor: Get https://proxy.golang.org/github.com/kardianos/govendor/@v/list: dial tcp 172.217.160.113:443: connectex: A connection attempt failed because the connected party did not pro...
第一周:基本组成元素基本数据类型流程控制第二周:复合数据类型数据类型转换字符切片copy第三周:函数基础函数进阶第四周:包管理和使用单元测试和常用模块第五周:面向对象的结构体面向对象的方法第六周:文件与IO操作目录操作与常用包第七周:接口介绍与用法反射基础与功能开发第八周:并发编程的概念、例程、闭包陷阱并发编程的共享数据、管道、常用包第九周:网络编程知识爬虫知识学习
一、条件语句1.1、ifif表达式的结果为true时执行语句块内代码package mainimport "fmt"func main() { var flag bool = true if flag { fmt.Println("true") }} 1.2、if-else当 if表达式结果为 true,则执行if语句块内代码,否则执行 else语句块内代码package mainimport "fmt"func main() { var flag bool = false if flag { fmt.Println("true") } else { fmt.Println("false") }} 1.3...
package mainimport ("fmt""reflect" )type Student struct { }func (s *Student) Listen() {fmt.Println("listen") }func main() {student := Student{}value := reflect.ValueOf(&student)f := value.MethodByName("Listen")f.Call([]reflect.Value{}) }
Go语言的转换 go的string字符串格式转json格式 确实有点麻烦,如果不知道json里面的类型好像就构建不了结构体了。 package mainimport ("encoding/json""fmt" )type Data struct {Status int `json:"status"`Msg int `json:"msg"` }func main() {msg := "{\"status\":200, \"msg\":18}"var data Dataif err := json.Unmarshal([]byte(msg), &data); err == nil {fmt.Println(data.Status)} else {fmt.Println(err)} }
目录 流式处理 服务端流式 客户端流式 双向流式 发布订阅服务 pubsub原理 代码实现 gRPC代码 服务端代码 订阅端代码 发布端代码流式处理 所谓流式处理,就是客户端和服务端一方可以源源不断地发送请求,另一方按照发送顺序依次处理请求。流式 RPC 分为三种,分别是服务端流式、客户端流式、双向流式 服务端流式 客户端发送一个请求给服务端,可获取一个数据流用来读取一系列消息。客户端从返回的数据流里一直读取直到没有更多消息为...
1、布尔类型布尔类型用于表示真假,类型名为bool,只有两个值true和false,占用一个字节宽度,零值为false var flag bool = true flag1 := false fmt.Println(flag,flag1)常用操作逻辑运算: 与(&&) 只有左、右表达式结果都为true,运算结果为truefmt.Println(flag&&true,flag1&&true) PS D:\goProject\day01> go run bool.go true false逻辑运算: 或(||) 只要左、右表达式有一个为true,运算结果为truefmt.Println(f...
一、基本组成元素1.1、标识符标识符是编程时所使用的名字,用于给变量、常量、函数、类型、接口、包名等进行命名,以建立名称和使用之间的联系。标识符命名规则:只能由非空字母(Unicode)、数字、下划线(_)组成只能以字母或下划线开头不能使用Go语言关键字避免使用Go语言预定义标识符标识符区别大小写建议使用驼峰式 Go语言提供一些预先定义的标识符用来表示内置的常量、类型、函数。在自定义标识符时应避免使用:1. 内置常量:...
path 包详解 package mainimport ("fmt""os""path""path/filepath" )func main() {//Path操作fmt.Println("Path操作-----------------")fmt.Println(path.Base("http://www.baidu.com/file/aa.jpg")) //aa.jpgfmt.Println(path.Clean("c:\\file//abc///aa.jpg")) //c:\file/abc/aa.jpgfmt.Println(os.Getwd()) //D:\Projects\GoPath\source\demo\syntax\path <nil>fmt.Println(path.D...
1、首先,我们在写代码时,代码测试是非常重要的一个事情,有些人会觉得写不写都无所谓,但是养成一种写代码之前做测试是一个良好的习惯,规范与否,取决于你是否把一种良好习惯坚持成为一种习惯。 2、golang有几种测试类型,例如:testing.T,testing.B,testing.PB,testing.M 3、testing.T类型的测试包是普通的测试 : package arrimport ("fmt""testing" )func TestArr(t *testing.T) {t.Run("开始测试第一个函数:", testArray)...
有一段Json数据,该Json数据中所有key对应的value值有各种类型,包括:数字、字符(串)、布尔值,以及由这些简单类型组成的对象,数组等,并且是多层嵌套的。前端将该Json解析后根据不同的key,将对应的value内容以不同的样式和布局展现。此时如果需要去除样式,在只需要value内容的时候(比如value值要作为被检索的内容时,其中的样式以及Json中无用的字符是要去掉的),就需要将Json中所有的value找出来并拼接成字符串。这里提供...
1 package main2 3 import "fmt"4 5 func printMap(cityMap map[string]string) {6 //cityMap 是一个引用传递7 for key, value := range cityMap {8 fmt.Println("key = ", key)9 fmt.Println("value = ", value) 10 } 11 } 12 13 func ChangeValue(cityMap map[string]string) { 14 cityMap["England"] = "London" 15 } 16 17 func main() { 18 cityMap := make(map[string]string) 19 20...
@Golang有意义的问题 和尚搬家 从前,有三个和尚,需要搬家,唯一的要求是要保证搬家前后房内物品布局一致,然后我编不下去了… 问 如何使用3个goroutine是由1-100的有序输出? 分析 问题的核心在于如何保证在并发条件下的有序输出。 主动控制式 package mainimport ("fmt""sync""time" )func main() {q := make(chan int)wg := new(sync.WaitGroup)wg.Add(1)go func(wg *sync.WaitGroup, q chan<- int) {defer wg.Done()defer clo...
记录golang利用切片实现栈操作,附例子如下 //init stack as string type slice,send data of string with space splite //return a stack with data func InitWithStringSpliteSpace(stack []string, s string) []string {for _, v := range strings.Split(s, " ") {stack = append(stack, v)}return stack }//push a data on top of stack //return a stack with data func PushTop(stack []string, top string) []string {retur...