Function names can be same as built in?

 package log

import (

const requestIDKey = 42

func Println(ctx context.Context, msg string) {
	id, ok := ctx.Value(requestIDKey).(int64)
	if !ok {
		log.Println("could not find request ID in context")
	log.Printf("[%d] %s", id, msg)

func Decorate(f http.HandlerFunc) http.HandlerFunc {
	return func(w http.ResponseWriter, r *http.Request) {
		ctx := r.Context()
		id := rand.Int63()
		ctx = context.WithValue(ctx, requestIDKey, id)
		f(w, r.WithContext(ctx))

Hi, I saw this code in this video:

and I don’t understand how he can use Println and Decorate as a custom function name.
I am getting yellow underlines which says “exported function Println should have comment or be unexported”

I don’t understand what it means :frowning:

exported function Println should have comment or be unexported

means that either you should add a comment above your function to say what it does, like

// Println prints lines to console
func Println(...) {}

Or you should not have the function exported. Any function starting with a capital letter is exported.
This means the function can be used from outside your package.


How outside the package? Does it become like when we go install something, and it can be called in any .Go file?

package main

import ""

func main() {

As any other function you call from an external package.